1
Mengelola Pertumbuhan Container: Ukuran vs. Kapasitas
AI037Lesson 14
00:00

Dalam C++, mengelola pertumbuhan container adalah tarian arsitektur antara Ukuran (elemen saat ini) dan Kapasitas (memori yang dialokasikan). Untuk container kontinu seperti vector dan string, mencapai kapasitas memicu relokasi: sistem menemukan blok memori yang lebih besar, memindahkan semua elemen, dan menghancurkan blok lama. Ini adalah operasi mahal dengan kompleksitas $O(n)$ yang menyebabkan invalidasi iterator—penunjuk Anda ke elemen lama menjadi "menggantung" dan berbahaya.

1. Strategi Perluasan

Untuk menghindari relokasi yang sering, vector implementasi mengalokasikan ruang "buffer". Perintah c.reserve(n) secara eksplisit menetapkan kapasitas minimum tanpa menambah elemen, sementara c.shrink_to_fit() adalah permintaan tidak mengikat untuk mengembalikan memori yang berlebihan ke sistem operasi.

2. Perbedaan Resize vs. Reserve

Sementara reserve hanya memengaruhi buffer, resize(n) secara aktif mengubah logika container. Mengurangi ukuran melalui resize menghancurkan elemen, sementara memperbesar menambahkan nilai yang diinisialisasi secara default.

Ukuran (Digunakan)Kapasitas TambahanKapasitas Total
⚠️ PERINGATAN: Jika resize mengurangi ukuran container, iterator ke elemen yang dihapus menjadi tidak valid. Jika perluasan menyebabkan relokasi, SEMUA semua iterator menjadi tidak valid.
main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>